const BASE_URL = getApp().globalData.BASE_URL

let token = null
let request_list = []
let is_login = false

// 登录获取token处理
const login = cb => {
  // 记录所有请求
  request_list.push(cb)
  // 防止重复请求登录
  if (!is_login) {
    is_login = true;
  } else {
    return
  }
  // 登录请求
  wx.login({
    success: function (res) {
      request({
        url: '/api/auth',
        data: {
          code: res.code
        }
      }).then(res => {
        if (res.code == 0) {
          token = res.data.token;
          // 全部请求回调
          request_list.forEach(cb => {
            cb && cb()
          })
          request_list = [];
          is_login = false;
        }
      })
    }
  })
}

// 统一请求封装
const request = obj => {
  return new Promise((resolve, reject) => {
    wx.showNavigationBarLoading()
    //带请求token
    if (obj.data && obj.data.token && !token) {
      // obj.token = token;
      login(() => {
        request(obj).then(res => {
          resolve(res)
        })
      })
    } else {
      wx.request({
        url: BASE_URL + obj.url,
        data: obj.data || {},
        method: obj.method || 'POST',
        // header: { 'token':obj.token},
        success: function (res) {
          if (res.data.code == 200 || res.data.code == 10000) {
            // 成功回调  没有数据
            resolve(res.data);
          } else if (res.data.code == 401) {
            //用户身份过期
            login(() => {
              request(obj).then(res => {
                resolve(res)
              })
            })
          }else {
            // 请求错误
            reject()
          }
        },
        fail: function (err) {
          reject(err)
        },
        complete: function (res) {
          wx.hideNavigationBarLoading()
        }
      })}
  })
}

export default request